// 图片相关类型定义

import type { UserVO } from './user'

// 基础图片信息
export interface Picture {
  id: string
  url: string
  name: string
  introduction?: string
  category?: string
  tags?: string // JSON数组字符串
  picSize?: number
  picWidth?: number
  picHeight?: number
  picScale?: number
  picFormat?: string
  userId?: string
  reviewStatus?: number // 0-待审核, 1-通过, 2-拒绝
  reviewMessage?: string
  reviewerId?: string
  reviewTime?: string
  thumbnailUrl?: string
  spaceId?: string
  picColor?: string
  createTime?: string
  editTime?: string
  updateTime?: string
  isDelete?: number
}

// 图片VO（视图对象）
export interface PictureVO {
  id: string
  url: string
  name: string
  introduction?: string
  category?: string
  tags?: string[] // 标签数组
  picSize?: number
  picWidth?: number
  picHeight?: number
  picScale?: number
  picFormat?: string
  userId?: string
  thumbnailUrl?: string
  spaceId?: string
  picColor?: string
  permissionList?: string[]
  userVO?: UserVO
  createTime?: string
  editTime?: string
  updateTime?: string
}

// 图片上传请求
export interface PictureUploadRequest {
  id?: string // 图片id(用于修改)
  fileUrl?: string // 图片url
  picName?: string // 图片名称
  spaceId?: string // 空间id
}

// 图片编辑请求
export interface PictureEditRequest {
  id: string
  name?: string
  introduction?: string
  category?: string
  tags?: string[]
}

// 图片更新请求（管理员）
export interface PictureUpdateRequest {
  id: string
  name?: string
  introduction?: string
  category?: string
  tags?: string[]
}

// 图片查询请求
export interface PictureQueryRequest {
  current?: number // 当前页码
  pageSize?: number // 每页数量
  sortField?: string // 要排序的字段
  sortOrder?: string // 排序顺序(默认降序)
  id?: string // 图片id
  name?: string
  introduction?: string
  category?: string
  tags?: string[]
  picSize?: number
  picWidth?: number
  picHeight?: number
  picScale?: number
  picFormat?: string
  searchText?: string // 搜索词
  userId?: string // 用户id
  spaceId?: string // 空间id
  nullSpaceId?: boolean // 是否只查询spaceId为null的图片(公共图片)
  reviewStatus?: number // 审核状态：0-待审核; 1-通过; 2-拒绝
  reviewMessage?: string
  reviewerId?: string // 审核用户id
  reviewTime?: string
  startEditTime?: string
  endEditTime?: string
}

// 图片标签和分类
export interface PictureTagCategory {
  tagList?: string[] // 标签列表
  categoryList?: string[] // 分类列表
}

// 删除请求
export interface DeleteRequest {
  id: string
}

// 图片审核请求
export interface PictureReviewRequest {
  id: string // 图片id
  reviewStatus: number // 审核状态：0-待审核, 1-通过, 2-拒绝
  reviewMessage?: string // 审核信息
}

// 批量上传请求
export interface PictureBatchUploadRequest {
  nameStrategy?: string // 图片命名策略：auto-自动命名, custom-自定义命名, filename-使用文件名
  namePrefix?: string // 自定义名称前缀
  tagStrategy?: string // 标签策略：ai-AI生成, custom-自定义标签, none-不设置标签
  customTags?: string[] // 自定义标签列表
  categoryStrategy?: string // 分类策略：ai-AI生成, custom-自定义分类, none-不设置分类
  customCategory?: string // 自定义分类
  spaceId?: string // 空间ID
  asyncAiProcess?: boolean // 是否异步处理AI标签生成，默认true
}

// 批量上传响应
export interface PictureBatchUploadVO {
  totalCount: number // 总上传数量
  successCount: number // 成功上传数量
  failureCount: number // 失败上传数量
  successList: PictureVO[] // 成功上传的图片列表
  failureList: UploadFailureInfo[] // 失败上传的图片信息列表
  hasAsyncTask: boolean // 是否有异步任务在处理AI标签生成
}

// 上传失败信息
export interface UploadFailureInfo {
  fileName: string // 文件名
  failureReason: string // 失败原因
  fileSize: number // 文件大小（字节）
}

// 图片审核统计VO
export interface PictureReviewCountVO {
  total: string // 总数量
  pending: string // 待审核数量
  approved: string // 已通过数量
  rejected: string // 已拒绝数量
}

// 图片颜色搜索请求
export interface SearchPictureByColorRequest {
  picColor: string // 图片主色调
  spaceId: string // 空间id
}

export interface PictureStyleRegenRequest {
  id: string // 空间ID，保持string避免精度丢失
  imageUrl: string // 图片URL（axios-case-converter会自动转为image_url）
  styleIndex: number // 风格索引（axios-case-converter会自动转为style_index）
}

// 图片风格重生成请求响应，用户获取TaskId
export interface PictureStyleRegenVO {
  output: Output
  requestId: string
}

// 图片风格重生成任务响应,用户查询任务状态
export interface PictureStyleRegenTaskVO {
  output: TaskOutput
  usage: Usage
  requestId: string
}

interface TaskOutput {
  taskId: string
  taskStatus: string
  submitTime: string
  scheduledTime: string
  endTime: string
  errorMessage: string
  startTime: string
  styleIndex: number
  errorCode: number
  results: Result[] // 字段名是 results（复数），不是 result（单数）
}

interface Output {
  taskStatus: string
  taskId: string
}

interface Usage {
  imageCount: number // 图片数量
}

interface Result {
  url: string
}
